home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / ddj0897.zip / DYN401.ZIP / class / double.c < prev    next >
C/C++ Source or Header  |  1997-04-16  |  6KB  |  220 lines

  1.  
  2.  
  3. /*  Copyright (c) 1993-1996 Algorithms Corporation  */
  4. /*  All rights reserved.  */
  5.  
  6.  
  7.  
  8.  
  9. /*  This file automatically generated by dpp - do not edit  */
  10.  
  11. #define    DPP_STRATEGY    2
  12. #define    DPP_FASTWIDE    0
  13.  
  14.  
  15.  
  16. #line 15 "double.d"
  17. #include <math.h> 
  18.  
  19. #define    CLASS    DoubleFloat_c
  20. #define    ivType    DoubleFloat_iv_t
  21.  
  22. #include "generics.h"
  23.  
  24. object    DoubleFloat_c;
  25.  
  26.  
  27. #line 28 "double.c"
  28. typedef struct  _DoubleFloat_iv_t  {
  29.     double iVal;
  30. }    DoubleFloat_iv_t;
  31.  
  32.  
  33.  
  34. #line 25 "double.d"
  35. cmeth objrtn DoubleFloat_cm_gNewWithDouble(object self, double val)
  36.     object obj = oSuper(DoubleFloat_c, gNew, self)(self); 
  37.     ivType *iv = ivPtr(obj); 
  38.     iv->iVal = val; 
  39.     return(obj); 
  40.  
  41. imeth objrtn DoubleFloat_im_gStringRepValue(object self)
  42. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  43.     return vSprintf(String, "%f", iv->iVal); 
  44.  
  45. imeth char DoubleFloat_im_gCharValue(object self)
  46. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  47.     return (char) iv->iVal; 
  48.  
  49. imeth short DoubleFloat_im_gShortValue(object self)
  50. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  51.     return (short) iv->iVal; 
  52.  
  53. imeth unsigned short DoubleFloat_im_gUnsignedShortValue(object self)
  54. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  55.     return (unsigned short) iv->iVal; 
  56.  
  57. imeth long DoubleFloat_im_gLongValue(object self)
  58. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  59.     return (long) iv->iVal; 
  60.  
  61. imeth double DoubleFloat_im_gDoubleValue(object self)
  62. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  63.     return (double) iv->iVal; 
  64.  
  65. imeth void * DoubleFloat_im_gPointerValue(object self)
  66. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  67.     return (void *) &iv->iVal; 
  68.  
  69. imeth objrtn DoubleFloat_im_gChangeValue(object self, object val)
  70. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  71.     ChkArg(val, 2); 
  72.     iv->iVal = gDoubleValue(val); 
  73.     return self; 
  74.  
  75. imeth objrtn DoubleFloat_im_gChangeCharValue(object self, int val)
  76. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  77.     iv->iVal = (double) val; 
  78.     return self; 
  79.  
  80. imeth objrtn DoubleFloat_im_gChangeShortValue(object self, int val)
  81. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  82.     iv->iVal = (double) val; 
  83.     return self; 
  84.  
  85. imeth objrtn DoubleFloat_im_gChangeUShortValue(object self, unsigned val)
  86. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  87.     iv->iVal = (double) val; 
  88.     return self; 
  89.  
  90. imeth objrtn DoubleFloat_im_gChangeLongValue(object self, long val)
  91. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  92.     iv->iVal = (double) val; 
  93.     return self; 
  94.  
  95. imeth objrtn DoubleFloat_im_gChangeDoubleValue(object self, double val)
  96. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  97.     iv->iVal = (double) val; 
  98.     return self; 
  99.  
  100. imeth objrtn DoubleFloat_im_gRound(object self, int p)
  101. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  102.     double r; 
  103.  
  104.     r = pow(10.0, (double) p); 
  105.     if (iv->iVal < 0.0) 
  106.         iv->iVal = -(floor(.5 + -iv->iVal * r) / r); 
  107.     else 
  108.         iv->iVal = floor(.5 + iv->iVal * r) / r; 
  109.     return self; 
  110.  
  111. imeth objrtn DoubleFloat_im_gTruncate(object self, int p)
  112. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  113.     double r; 
  114.  
  115.     r = pow(10.0, (double) p); 
  116.     if (iv->iVal < 0.0) 
  117.         iv->iVal = -(floor(-iv->iVal * r) / r); 
  118.     else 
  119.         iv->iVal = floor(iv->iVal * r) / r; 
  120.     return self; 
  121.  
  122. imeth int DoubleFloat_im_gHash(object self)
  123. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  124.     double t; 
  125.  
  126.     t = .6125423371 * iv->iVal; 
  127.     t = t < 0.0 ? -t : t; 
  128.     return (int) (BIG_INT * (t - floor(t))); 
  129.  
  130. imeth int DoubleFloat_im_gCompare(object self, object obj)
  131. { DoubleFloat_iv_t *iv = GetIVs(DoubleFloat, self);
  132.     double sv, ov; 
  133.  
  134.     ChkArg(obj, 2); 
  135.     if (ClassOf(obj) != CLASS) 
  136.         return oSuper(DoubleFloat_c, gCompare, self)(self, obj); 
  137.     if ((sv=iv->iVal) < (ov=ivPtr(obj)->iVal)) 
  138.         return -1; 
  139.     else if (sv == ov) 
  140.         return 0; 
  141.     else 
  142.         return 1; 
  143.  
  144.  
  145. #line 165 "double.c"
  146.  
  147. objrtn    DoubleFloat_initialize(void)
  148. {
  149.     static  CRITICALSECTION  cs;
  150.     static  int volatile once = 0;
  151.  
  152.     ENTERCRITICALSECTION(_CI_CS_);
  153.     if (!once) {
  154.         INITIALIZECRITICALSECTION(cs);
  155.         once = 1;
  156.     }
  157.     LEAVECRITICALSECTION(_CI_CS_);
  158.  
  159.     ENTERCRITICALSECTION(cs);
  160.  
  161.     if (DoubleFloat_c) {
  162.         LEAVECRITICALSECTION(cs);
  163.         return DoubleFloat_c;
  164.     }
  165.     INHIBIT_THREADER;
  166.     Number_initialize();
  167.     if (DoubleFloat_c)  {
  168.         ENABLE_THREADER;
  169.         LEAVECRITICALSECTION(cs);
  170.         return DoubleFloat_c;
  171.     }
  172.     DoubleFloat_c = gNewClass(Class, "DoubleFloat", sizeof(DoubleFloat_iv_t), 0, Number, END);
  173.     cMethodFor(DoubleFloat, gNewWithDouble, DoubleFloat_cm_gNewWithDouble);
  174.     iMethodFor(DoubleFloat, gTruncate, DoubleFloat_im_gTruncate);
  175.     iMethodFor(DoubleFloat, gRound, DoubleFloat_im_gRound);
  176.     iMethodFor(DoubleFloat, gUnsignedShortValue, DoubleFloat_im_gUnsignedShortValue);
  177.     iMethodFor(DoubleFloat, gChangeDoubleValue, DoubleFloat_im_gChangeDoubleValue);
  178.     iMethodFor(DoubleFloat, gDoubleValue, DoubleFloat_im_gDoubleValue);
  179.     iMethodFor(DoubleFloat, gCompare, DoubleFloat_im_gCompare);
  180.     iMethodFor(DoubleFloat, gChangeLongValue, DoubleFloat_im_gChangeLongValue);
  181.     iMethodFor(DoubleFloat, gChangeShortValue, DoubleFloat_im_gChangeShortValue);
  182.     iMethodFor(DoubleFloat, gShortValue, DoubleFloat_im_gShortValue);
  183.     iMethodFor(DoubleFloat, gPointerValue, DoubleFloat_im_gPointerValue);
  184.     iMethodFor(DoubleFloat, gCharValue, DoubleFloat_im_gCharValue);
  185.     iMethodFor(DoubleFloat, gStringRepValue, DoubleFloat_im_gStringRepValue);
  186.     iMethodFor(DoubleFloat, gChangeUShortValue, DoubleFloat_im_gChangeUShortValue);
  187.     iMethodFor(DoubleFloat, gHash, DoubleFloat_im_gHash);
  188.     iMethodFor(DoubleFloat, gChangeValue, DoubleFloat_im_gChangeValue);
  189.     iMethodFor(DoubleFloat, gLongValue, DoubleFloat_im_gLongValue);
  190.     iMethodFor(DoubleFloat, gChangeCharValue, DoubleFloat_im_gChangeCharValue);
  191.  
  192.     ENABLE_THREADER;
  193.  
  194.     LEAVECRITICALSECTION(cs);
  195.  
  196.     return DoubleFloat_c;
  197. }
  198.  
  199.  
  200.  
  201.